Async Validation এবং Error Notification Techniques

Microsoft Technologies - এমভিভিএম (MVVM) Validation এবং Error Handling Techniques |
209
209

MVVM প্যাটার্নে Async Validation এবং Error Notification ব্যবহৃত হয় যখন অ্যাপ্লিকেশনের ভিউমডেল সঠিকভাবে ডেটা যাচাই করার পাশাপাশি ব্যবহারকারীকে ভুল তথ্য প্রদর্শন করতে চায়। Async Validation মূলত দীর্ঘস্থায়ী প্রক্রিয়া যেমন ডেটাবেস যাচাই, API কল, বা সার্ভার সাইড ভ্যালিডেশন হ্যান্ডেল করতে ব্যবহৃত হয়। এক্ষেত্রে, Error Notification ব্যবহারকারীকে সঠিকভাবে ফিডব্যাক দেয় যাতে তারা সমস্যা দ্রুত জানতে পারে এবং সংশোধন করতে পারে।


Async Validation

Async Validation হল সেই প্রক্রিয়া যেখানে ডেটা যাচাইয়ের কাজ একটি অ্যাসিঙ্ক্রোনাস (Asynchronous) পদ্ধতিতে করা হয়, যাতে ইউজার ইন্টারফেস (UI) স্ন্যাগ বা ফ্রিজ না হয়ে, স্বচ্ছন্দে কাজ চালিয়ে যেতে পারে। এক্ষেত্রে ViewModel-এ ICommand বা Task ব্যবহার করে ভ্যালিডেশন পরিচালিত হয়।

উদাহরণ: Async Validation in MVVM

ধরা যাক, আমরা একটি Email ফিল্ড ভ্যালিডেট করতে চাই, যা একটি সার্ভার সাইড চেক (যেমন ইমেইল রেজিস্ট্রেশন চেক) সম্পাদন করবে।

  1. ViewModel-এ Async Validation:
public class RegistrationViewModel : INotifyPropertyChanged
{
    private string _email;
    private string _emailError;
    private bool _isEmailValid;
    
    public string Email
    {
        get => _email;
        set
        {
            if (_email != value)
            {
                _email = value;
                OnPropertyChanged();
                ValidateEmailAsync();
            }
        }
    }

    public string EmailError
    {
        get => _emailError;
        private set
        {
            if (_emailError != value)
            {
                _emailError = value;
                OnPropertyChanged();
            }
        }
    }

    public bool IsEmailValid
    {
        get => _isEmailValid;
        private set
        {
            if (_isEmailValid != value)
            {
                _isEmailValid = value;
                OnPropertyChanged();
            }
        }
    }

    private async Task ValidateEmailAsync()
    {
        EmailError = string.Empty;
        IsEmailValid = false;

        if (string.IsNullOrEmpty(Email))
        {
            EmailError = "Email cannot be empty.";
            return;
        }

        var isValid = await CheckEmailInDatabaseAsync(Email);

        if (isValid)
        {
            IsEmailValid = true;
        }
        else
        {
            EmailError = "Email is already registered.";
        }
    }

    private async Task<bool> CheckEmailInDatabaseAsync(string email)
    {
        // Fake async DB check (in real case, call API or database)
        await Task.Delay(2000); // Simulating async task
        return email != "existing@example.com"; // Fake check
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

এখানে, Email প্রপার্টি যখন পরিবর্তিত হবে, তখন ValidateEmailAsync কল করা হবে, যা ইমেইলটি সার্ভারের সাথে যাচাই করবে এবং ব্যবহারকারীর কাছে উপযুক্ত ভুল বার্তা (Error Message) দেখাবে।

  1. XAML ফাইল (View) তে:
<!-- XAML File (View) -->
<TextBox Text="{Binding Email}" />
<TextBlock Text="{Binding EmailError}" Foreground="Red" />
<Button Content="Register" Command="{Binding RegisterCommand}" IsEnabled="{Binding IsEmailValid}" />

এখানে, EmailError ত্রুটি বার্তাটি TextBlock এ দেখানো হচ্ছে, যা ValidateEmailAsync থেকে প্রাপ্ত হবে।


Error Notification Techniques

Error Notification টেকনিকটি ব্যবহৃত হয় যখন অ্যাপ্লিকেশনটিতে কোনো ত্রুটি ঘটলে তা ব্যবহারকারীকে দেখানোর প্রয়োজন হয়। এই ত্রুটির বার্তা সাধারণত ViewModel থেকে View-এ পাঠানো হয়। এ জন্য আপনি INotifyDataErrorInfo বা ValidationAttribute ব্যবহার করতে পারেন।

1. INotifyDataErrorInfo Interface

INotifyDataErrorInfo ইন্টারফেসের মাধ্যমে ViewModel-এ ডেটা ভ্যালিডেশন এবং এরর ম্যাসেজ গুলি View-এ সরবরাহ করা যায়। এই ইন্টারফেসের মাধ্যমে অ্যাসিঙ্ক্রোনাস বা সিনক্রোনাস ভ্যালিডেশন করতে পারবেন।

উদাহরণ:
public class RegistrationViewModel : INotifyDataErrorInfo
{
    private readonly Dictionary<string, List<string>> _errors = new Dictionary<string, List<string>>();

    public bool HasErrors => _errors.Any();

    public IEnumerable GetErrors(string propertyName)
    {
        if (_errors.ContainsKey(propertyName))
        {
            return _errors[propertyName];
        }

        return null;
    }

    private string _email;

    public string Email
    {
        get => _email;
        set
        {
            if (_email != value)
            {
                _email = value;
                ValidateEmail();
            }
        }
    }

    private void ValidateEmail()
    {
        ClearErrors(nameof(Email));

        if (string.IsNullOrEmpty(Email))
        {
            AddError(nameof(Email), "Email cannot be empty.");
        }

        // Simulate async email check
        if (Email == "existing@example.com")
        {
            AddError(nameof(Email), "Email is already registered.");
        }
    }

    private void AddError(string propertyName, string error)
    {
        if (!_errors.ContainsKey(propertyName))
        {
            _errors[propertyName] = new List<string>();
        }

        _errors[propertyName].Add(error);
        OnErrorsChanged(propertyName);
    }

    private void ClearErrors(string propertyName)
    {
        if (_errors.ContainsKey(propertyName))
        {
            _errors[propertyName].Clear();
            OnErrorsChanged(propertyName);
        }
    }

    public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;

    protected virtual void OnErrorsChanged(string propertyName)
    {
        ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propertyName));
    }
}

এখানে, INotifyDataErrorInfo ইন্টারফেসটি Email প্রপার্টির জন্য ত্রুটি বার্তা প্রদান করে, এবং সেই ত্রুটির বার্তা View তে দেখানো হয়।

2. XAML (View) তে Error Notification

<!-- XAML File (View) -->
<TextBox Text="{Binding Email}" />
<TextBlock Text="{Binding Errors[Email]" Foreground="Red" />
<Button Content="Register" Command="{Binding RegisterCommand}" IsEnabled="{Binding IsEmailValid}" />

এখানে, TextBlock এর মাধ্যমে Email প্রপার্টির ত্রুটি বার্তা দেখানো হচ্ছে।


Async Validation এবং Error Notification এর সুবিধা

  • User Experience: ইউজারকে সঠিক সময়ে এবং সঠিকভাবে ত্রুটি বার্তা জানানো, ফলে অ্যাপ্লিকেশনটি আরও ইউজার-ফ্রেন্ডলি হয়ে ওঠে।
  • Non-blocking: Async Validation এর মাধ্যমে ভ্যালিডেশন লম্বা সময় নিলেও অ্যাপ্লিকেশন বা UI ব্লক হয় না।
  • Separation of Concerns: ViewModel এবং View এর মধ্যে পরিষ্কার বিভাজন বজায় থাকে, এবং UI কোডের তুলনায় ViewModel-এ অধিক কার্যকারিতা থাকে।

এভাবে Async Validation এবং Error Notification MVVM প্যাটার্নে ব্যবহারকারী ইন্টারঅ্যাকশন এবং অ্যাপ্লিকেশনের কার্যকারিতা উন্নত করতে সাহায্য করে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion